Virtualization technologies have become widely used for sharing limited computer hardware resources. In a hardware virtualization environment, sometimes also referred to as a platform virtualization environment, one or more virtual machines can simulate a host computer with its own operating system. In particular, software executed on these virtual machines can be separated from the underlying hardware resources. As a result, virtual machines running on a same host computer can each have its own operating system. For example, a computer that is running Microsoft Windows operating system may host a virtual machine that simulates a computer running a Linux operating system, based on which Linux-based software can be executed.
In a virtualization environment, a virtual machine can have one or more virtual disks. A virtual disk can have disk partitions and a file system, similar to those of a physical disk. The file system of a virtual disk can also include files and folders. Therefore, a virtual disk can be a system disk, which includes disk partitions and system files. A virtual disk can also be a user disk, which includes user data such as user files and folders. Virtual disk can be used as a virtual hard disk drive of a virtual machine. For various purposes, virtual disks can also be transmitted from a client device to a server or vice versa. For example, a virtual system disk can be transmitted from a server to a client device to set up or update the system disk of a virtual machine executed on the client device. Currently, virtual disks are transmitted as compressed files, such as compressed (Virtual Hard Disk) VHD files by using GET and PUT instructions in an HTTP protocol.
In particular, when publishing a new version of a system disk of a virtual machine executed on a client device, the server can generate a corresponding compressed VHD file for the system disk, capturing the differences between the current version and the new version of the system disk. The server, via a synchronizer, can then compress the VHD file into a separate copy that is stored in a data storage space (e.g., a repository) of the server. The client device can request the compressed the VHD file by sending a HTTP GET instruction. The client device can then download the compressed VHD file and decompress it and apply the decompressed VHD file to install or update the system disk of the client device.
On the other hand, when providing backup of a user disk of the client device, the client device can generate a corresponding compressed VHD file of the user disk, which stores the differences between the current version and the new version of the user disk. The client device can send the compressed VHD file to a server by sending a HTTP PUT instruction to the server. The server, via a synchronizer, can then store the compressed VHD file in the repository. After the server receives several compressed VHD files representing differences among several versions of the user disk, it can decompress the several VHD files and combine the differences together to form one new VHD file. Such decompression and combining process is sometimes also referred to as backup rollup process. The server can then recompress the new VHD file and store it in the repository.
The above described process of installing, updating, or providing backup of virtual disks (e.g., system disks or user disks) is sometimes also referred to as virtual disk provisioning. Because the frequent compressing and decompressing by the client device and the server, however, the current virtual disk provisioning technologies often consume significant computing power. Moreover, the server and the client device may not support the same format of the virtual disk. For example, a server can support a Virtual Machine Disk (VMDK) format, but a client device can support a VHD file format, or an enhanced virtual disk format (e.g., a VHDX format). Therefore, transmitting a virtual disk in a certain format (e.g., VHD format) from a server to a client device or vice versa can cause incompatibility issues if the receiving device supports another file format.
Furthermore, when the client device sends a compressed virtual disk file, such as a VHD file, to provide backup of the user disk, the backup rollup process can also consume significant computer resources and restrict the scalability of the backup operation. For example, computer resources of a server can be depleted quickly if a large number of client devices request backup, which would necessitate many compressing and decompressing operations. Furthermore, under some circumstances, unused and deleted blocks of the virtual disk may still be included in the compressed VHD file and transmitted to the receiving device, even if the blocks contain no useful information. Additionally, when a server transmits an update of the system disk to a client device in a VHD file format, the client device can be required to download all differences between all prior versions of the system disk and then combine the differences. The downloading and combining of all prior versions can also result in wasting network bandwidth and computing resources.